import { defineStore } from 'pinia';


const useAttendanceStore = defineStore('attendance', {
    state: () => ({
        checkInSuccess: false,
        checkOutSuccess: false,
        isResetScheduled: false, // 标志位，用于判断是否已经设置了定时器
    }),
    actions: {
        // 设置上班打卡状态
        setCheckInSuccess(newValue: boolean) {
            this.checkInSuccess = newValue;
            this.saveStatusToLocalStorage(); // 保存状态到 localStorage
        },
        // 设置下班打卡状态
        setCheckOutSuccess(newValue: boolean) {
            this.checkOutSuccess = newValue;
            this.saveStatusToLocalStorage(); // 保存状态到 localStorage
        },
        // 保存状态到 localStorage
        saveStatusToLocalStorage() {
            const today = new Date().toISOString().split('T')[0]; // 获取今天的日期
            const status = {
                checkInSuccess: this.checkInSuccess,
                checkOutSuccess: this.checkOutSuccess,
            };
            localStorage.setItem(`attendanceStatus-${today}`, JSON.stringify(status));
        },
        // 从 localStorage 加载状态
        loadStatusFromLocalStorage() {
            const today = new Date().toISOString().split('T')[0]; // 获取今天的日期
            const statusStr = localStorage.getItem(`attendanceStatus-${today}`);

            // 如果 localStorage 中没有数据，使用默认值
            if (!statusStr) {
                this.checkInSuccess = false;
                this.checkOutSuccess = false;
                return;
            }

            try {
                // 尝试解析 JSON 数据
                const status = JSON.parse(statusStr);
                this.checkInSuccess = status.checkInSuccess || false;
                this.checkOutSuccess = status.checkOutSuccess || false;
            } catch (error) {
                console.error('解析 localStorage 数据失败:', error);
                // 如果解析失败，使用默认值
                this.checkInSuccess = false;
                this.checkOutSuccess = false;
            }
        },
        // 每天 0 点重置状态
        resetCheckStatusEveryDay() {
            if (this.isResetScheduled) {
                return; // 如果已经设置了定时器，直接返回
            }

            const today = new Date().toISOString().split('T')[0]; // 获取今天的日期
            const now = new Date();
            const nextMidnight = new Date(now);
            nextMidnight.setHours(24, 0, 0, 0); // 设置到第二天的 0 点

            const timeUntilMidnight = nextMidnight - now; // 计算距离第二天 0 点的时间

            // 设置定时器，在第二天 0 点重置状态
            setTimeout(() => {
                this.checkInSuccess = false;
                this.checkOutSuccess = false;
                localStorage.removeItem(`attendanceStatus-${today}`); // 清空当天的状态
                this.isResetScheduled = false; // 重置标志位
                this.resetCheckStatusEveryDay(); // 递归调用，确保每天都会重置
            }, timeUntilMidnight);

            this.isResetScheduled = true; // 标记定时器已设置
        },
        // 初始化 Store
        init() {
            this.loadStatusFromLocalStorage(); // 加载状态
            this.resetCheckStatusEveryDay(); // 设置每天重置状态
        },
    },
});
export default useAttendanceStore;